﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>#Warn</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>#Warn <span class="ver">[v1.0.95.00+]</span></h1>

<p>启用或禁用为选择的在加载时或运行时提示开发者错误的警告, 例如书写错误或缺少全局声明.</p>

<pre class="Syntax">#Warn [, WarningType, WarningMode]</pre>

<p>打算把此指令作为开发者工具, 通过让这些错误简单的显露出来以便加快脚本开发.</p>

<p>这个特征概念上与 Visual Basic 的 &quot;Option Explicit&quot; 设置和 Perl 的 &quot;Strict&quot; 编译指示有关, 尽管它只提供额外的警告, 而不需要对脚本进行任何预先的改变 (例如对所有变量进行显式声明).</p>

<h3>参数</h3>
<table class="info">
  <tr>
    <td width="15%" height="24">WarningType</td>
    <td width="85%">
      <p>下面列表中值的其中一个.如果省略, 默认为 <i>All</i>.</p>
      <p><strong>All</strong>:对指定的 <em>WarningMode</em> 适用的所有支持的警告类型.</p>
      <p><strong>UseUnsetLocal</strong> 或 <strong>UseUnsetGlobal</strong>:在明确对变量进行赋值前使用变量 (例如读取它的值) 时警告.此选项根据局部或全局变量划分为独立的警告类型, 因为使用未赋值的局部变量可能能是开发者错误, 许多 AutoHotkey 脚本在编写时会特意检查未赋值的全局变量, 所以可能需要为局部变量启用此类型的警告而禁用全局变量的.这些是运行时错误, 它们可能在脚本运行的任意时刻产生.</p>
      <p><strong>UseEnv</strong>:在自动使用环境变量代替空的脚本变量时警告.当脚本中使用的某个变量名意外地与一个环境变量名相同时会发生这种情况, 但如果脚本使用了 <a href="_NoEnv.htm">#NoEnv</a> (推荐使用) 则不会发生.这是运行时警告; 它可能在脚本运行的任意时刻产生.</p>
      <p><strong>LocalSameAsGlobal</strong>:当一个局部变量和脚本中任意位置的全局变量名称相同时警告.请注意这种警告仅适用于隐式引入的局部变量 - 而不适用于明确声明的变量例如 <code>local x</code> 或 <code>static y</code>, 或函数参数).这是加载时警告; 它仅可能在脚本首次加载时产生.</p></td>
  </tr>
  <tr>
    <td width="15%" height="24">WarningMode</td>
    <td width="85%">
      <p>下面列表中值的其中一个.如果省略, 默认为 <I>MsgBox</I>.</p>
      <p><strong>MsgBox</strong>:将显示描述警告的消息框 (请注意当消息框解除后, 脚本将照常继续).</p>
      <p><strong>OutputDebug</strong>:警告的描述将被发送到调试器 (如果有的话) 显示出来.想了解更多详情, 参见 <a href="OutputDebug.htm">OutputDebug</a>.</p>
      <p><strong>Off</strong>:禁用指定的警告类型.</p>
    </td>
  </tr>
</table>
<h3>备注</h3>
	<p>默认情况下, 所有的警告都是关闭的.</p>
	<p>无法在运行时启用或禁用警告; 这个设置是在脚本加载时确定的.因此它在脚本中的位置是不重要的 (并且与其他 # 指令一样, #Warn 不能根据条件执行).</p>
	<p>然而, 多个 #Warn 指令的顺序是有意义的: 最近一次设置指定警告的指令决定了这种警告的模式.所以, 例如下面的两个语句具有启用除了 UseEnv 外的所有警告的组合效果:</p>
<pre>#Warn All
#Warn UseEnv, Off

EnvSet EnvVar, 1
x := EnvVar       <em>; 由于没有使用 #NoEnv 这句是正确的.</em>
x := NotAnEnvVar  <em>; 这句会产生警告.</em>
</pre>
<h3>相关</h3>
<p><a href="../Functions.htm#Locals">局部和全局变量</a></p>
<h3>示例</h3>
<pre class="NoIndent">
#Warn All, Off                    <em>; 禁用所有警告.这是默认设置.</em>
#Warn                             <em>; 启用各种警告并把它们显示到消息框中.</em>
#Warn UseUnsetLocal, OutputDebug  <em>; 在赋值前使用局部变量时发送警告到 OutputDebug.</em>
</pre>

</body>
</html>
